﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace inf_1007_devoir3
{
    public partial class gestionVehicule : Form
    {
        int indexModele;
        //constructeur
        public gestionVehicule(int indexMod)
        {
            InitializeComponent();
            btnAjouterVehicule.Text = "Ajouter";
            activerChampsVehicule();
            viderInterfaceVehicule();
            indexModele = indexMod;
        }

        public gestionVehicule(Vehicule vehicule, int indexV, int indexM)
        {
            InitializeComponent();
            remplirInterfaceVehicule(vehicule,  CtrlVehicule.getInstance().getVehicules()[indexV].getDisponibilite());
            desactiverChampsVehicule();
            indexModele = indexM;
        }
        //remplir les champs de l'interface
        public void remplirInterfaceVehicule(Vehicule vehicule, bool dispo)
        {
            txtNoImmatriculation.Text = vehicule.getImmatriculation();
            txtNoSerie.Text = vehicule.getNoSerie();
            cboCouleur.Text = vehicule.getCouleur();
            txtKilometrage.Text = vehicule.getKilometrage().ToString();
            if (dispo == true)
            {
                cboDispo.SelectedIndex = 0;
            }
            else
            {
                cboDispo.SelectedIndex = 1;
            }
        }
        //activation et desactivation des champs
        public void activerChampsVehicule()
        {
            txtNoImmatriculation.ReadOnly = false;
            txtNoSerie.ReadOnly = false;
            cboCouleur.Enabled = true;
            txtKilometrage.ReadOnly = false;
            cboDispo.Enabled = true;

            btnRetour.Enabled = false;
        }

        public void desactiverChampsVehicule()
        {
            txtNoImmatriculation.ReadOnly = true;
            txtNoSerie.ReadOnly = true;
            cboCouleur.Enabled = false;
            txtKilometrage.ReadOnly = true;
            cboDispo.Enabled = false;

            btnRetour.Enabled = true;
        }
        //vide le champs pour l'ajout
        public void viderInterfaceVehicule()
        {
            txtNoImmatriculation.Text = "";
            txtNoSerie.Text = "";
            cboCouleur.SelectedIndex = 0;
            txtKilometrage.Text = "";
            cboDispo.SelectedIndex = 0;
        }
        //evenement sur des boutons
        private void btnAjouterVehicule_Click(object sender, EventArgs e)
        {
            if (btnAjouterVehicule.Text == "Nouveau modèle")
            {
                btnAjouterVehicule.Text = "Enregistrer";
                viderInterfaceVehicule();
                activerChampsVehicule();

            }
            else
            {
                if (validationVehicule())
                {
                    int maxNo;
                    maxNo = CtrlVehicule.getInstance().getVehicules()[(CtrlVehicule.getInstance().getVehicules().Count()-1)].getNoLocation();

                    CtrlVehicule.getInstance().ajouterVehicule(maxNo,txtNoImmatriculation.Text ,txtNoSerie.Text, cboCouleur.Text,int.Parse(txtKilometrage.Text),CtrlModele.getInstance().getModeles()[indexModele]);

                    btnAjouterVehicule.Text = "Nouveau véhicule";
                    desactiverChampsVehicule();
                }


            }
        }

        private void btnRetour_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //validation pour les entiers
        public bool valideInt(TextBox txt, string msg1, string msg2)
        {
            bool valVal = true;
            int iTemp;

            if (txt.Text == "")//regarde si il y a du contenu
            {
                errorVehicule.SetError(txt, msg1);
                valVal = false;
            }

            if (int.TryParse(txt.Text, out iTemp) == false)//regarde si le contenu est un entier
            {
                errorVehicule.SetError(txt, msg2);
                valVal = false;
            }
            return valVal;
        }
        //validation pour string
        public bool valideStr(TextBox txt, string msg)
        {
            bool valVal = true;

            if (txt.Text == "")//regarde si il y a du contenu
            {
                errorVehicule.SetError(txt, msg);
                valVal = false;
            }
            return valVal;
        }
        //appel des fonctions de validation + message d'erreur
        public bool validationVehicule()
        {
            bool valValidation = true;
            errorVehicule.Clear();

            if (valideStr(txtNoImmatriculation, "Entrez un numéro d'immatriculation.") == false)
                valValidation = false;
            
            if (valideStr(txtNoSerie, "Entrez un numéro de série.") == false)
                valValidation = false;
            
            if (valideInt(txtKilometrage, "Entrez le kilométrage.", "Entrez un nombre entier numérique.") == false)
                valValidation = false;

            return valValidation;
        }
    }
}
